import json
from typing import List, Dict, Any

from utils.logger import get_logger

logger = get_logger("chatUtils")
splitter = "\n\t\t" #减少用户察觉


def getRecentDiffDiscussConversations(conversations: List[Dict[str, Any]]):
    """
    获取最近的差异讨论对话，以'\n\t\t'为分界线

    :param conversations: 对话记录列表
    :return: 最近的讨论对话列表
    """
    if not conversations:
        return []

    # 找到最近的差异讨论对话
    for i in range(len(conversations) - 1, -1, -1):
        if conversations[i].get('role') == "assistant" and splitter in conversations[i].get('content'):
            return conversations[i:]

    return []


def getUserInput(conversations):
    return next((m.get('content') for m in reversed(conversations) if m.get('role') == "user"), "")  # 获取本次用户输入


def getBaseTable(conversations):
    """
    从对话记录中提取第一个包含完整表单的assistant消息

    :param conversations: 对话记录列表
    :return: 基础表单内容，如果没有则返回空字符串
    """
    if not conversations:
        return ""

    for message in conversations:
        if message.get('role') == "assistant":
            content = message.get('content', '')
            # 检查是否是完整的表单格式（包含关键字段）
            form_indicators = ["达人昵称", "折扣要求", "推广周期", "投放形式"]
            if all(indicator in content for indicator in form_indicators):
                return content

    return ""


def convert_userInput_to_formDict(text: str) -> dict:
    """
    转换用户给的表单字符串成为dict

    :param text: 用户输入的表单文本
    :return: 包含所有字段名的字典，字段名作为key，value为空字符串
    """
    # logger.info(f"接收到的字符串内容: {text}")
    # logger.debug(f"字符串长度: {len(text)}")
    try:
        # 分割文本为行
        lines = text.split('\n')
        result_dict = {}

        for line in lines:
            # 把所有的line中"："转成":"
            line = line.replace("：", ":")
            # 检查是否包含冒号（字段分隔符）
            if ':' in line:
                # 分割字段名和值
                field_parts = line.split(':', 1)
                field_name = field_parts[0].strip()
                result_dict[field_name] = field_parts[1].strip()

        return result_dict

    except Exception as e:
        # logger.error(f"处理表单失败: {str(e)}")
        return {"error": f"处理表单失败: {str(e)}"}


def convert_formDict_to_userInput(formDict: dict) -> str:
    """
    将表单字典转换为用户输入的字符串格式

    :param formDict: 包含表单字段的字典
    :return: 用户输入的字符串格式
    """
    # 将字典转换为字符串
    return '\n'.join(f"{key}: {value}" for key, value in formDict.items())

def wechat_table_to_apistr_and_dict(text: str):
    """
    将微信表单字符串数据转换为API接口需要的字符串格式和字典格式
    text有很多行，按行分割

    """
    lt = text.strip().split("\n")
    new_lt = []
    for e in lt:
        new_lt.append(e.strip())
    userinput_dict = convert_userInput_to_formDict("\n".join(new_lt))

    return "\\n".join(new_lt),json.dumps(userinput_dict, ensure_ascii=False)

if __name__ == '__main__':
    t="""1.达人昵称:Ylin的治愈家
2.达人主页链接:https://www.xiaohongshu.com/user/profile/5a9f8dc34eacab4fc503d7c6
3.品牌/产品名称:九牧丝雨花洒丝幕、九牧丝雨花洒旗舰版、九牧丝雨花洒星幕、九牧丝雨花洒青春版、九牧丝雨花洒纱意
4.产品品类:卫浴
5.推广周期:（10.21-11.11）
6.投放形式:（视频报备）
7.报备图文价格:（例：23000元）
8.报备视频价格:（例：29000元）
9.是否可以保价到次月:（例：是/否）
10.折扣要求:（25）
11.创作方向:横向测评、选购攻略、大促/国补、品质生活、家居测评
12.排竞要求:（恒洁、汉斯格雅）
13.寄样方式:寄拍
14.产品达人是否可接:（是/否）
15.可保阅读数据:（例：视频保底1万播放，图文保底7000阅读）
16.可保互动数据:（例：点赞+评论≥400）
17.是否可以免费授权品牌信息流 6 个月:（例：可以）
18.是否可以免费授权品牌二剪及全平台传播（包括电商）6 个月:（例：可以）
19.是否可以免费分发其他平台:（例：可以同步至抖音）
20.是否有特殊合作注意事项（如广告占比要求、脚本修改次数等）:（例：广告占比≤25%，脚本初稿可修改2次）
21.是否免费授权电商平台植入 6 个月:
22.是否授权搜索引导6 个月:
23.是否授权带相关话题6 个月:
24.是否授权组件需求6 个月:
25.是否授权引流需求6 个月:"""
    st,di=wechat_table_to_apistr_and_dict(t)
    print(st)
    print(di)
